1. O autorze


Jestem studentem I roku Geoinformacji. Lubię stawiać sobie wysokie wymagania. Staram sie z dnia na dzien podnosic swoje kwalifikacje. Zaliczam wiele kursów, które rozwijaja mnie i moje nabyte juz umiejetnosci.

W wolnych chwilach uwielbiam jezdzic na rowerze oraz sluchac muzyki, odkrywajac coraz to ciekawsze gatunki muzyczne. Dlatego że nie moge wstawic tutaj linka do bloga ani niczego co prowadze, postanowilem podzielic sie linkiem do mojej playlisty, która towarzyszyla mi przy tworzeniu tego wlasnie projektu. Japanese Trap - czyli tradycyjnej muzyki japonskiej wzbogaconej o trapowe brzmienia.

Źródlo obrazu


2. Cel projektu


Celem przedmiotowego ćwiczenia jest zapoznanie się studentów z działaniem R Markdown, czyli językiem znaczników przeznaczonym do formatowania tekstu. R Markdown został stworzony w celu jak najbardziej uproszczonego tworzenia i formatowania tekstu. Moim zadaniem - jako studenta I roku Geoinformacji - było wykorzystanie zdobytej przez mnie wiedzy z zakresu pisania programów przy użyciu R Studio, czyli napisania sprawozdania technicznego. Aby prawidłowo wykonać ćwiczenie musialem zaznajomić się z działaniem srodowiska programistycznego, poszczegolnymi komendami programu oraz operacjami pracy z danymi aby uzyskac oczekiwany przez nmnie efekt.


3. R (język programowania)


R - interpretowany jezyk programowania oraz srodowisko do obliczen statystycznych. Stosowany jest w analizie szeroko rozumianych danych środowiskowych i przestrzennych oraz ich wizualizacji. Podobny jest do języka i środowiska S stworzonego w Bell Laboratories przez Johna Chambersa i jego współpracowników. R jako implementacja języka S została stworzona przez Roberta Gentlemana i Rossa Ihakę na uniwersytecie w Auckland. Nadaje się on świetnie do interaktywnej pracy z danymi, ponieważ połączono w nim wybrane cechy języków funkcyjnych oraz obiektowych.


4. R Markdown


R Markdown - jest formatem pliku stworzonym do sporzadzania dynamicznych dokumentow z wykorzystaniem R. Plik typu Markdown jest pisany w specyficzny dla siebie sposob, który zaklada bardzo latwa edycje tekstu oraz implementowanie w nim fragmentow kodu (chunki zawierajace kod z poleceniami w jezyku R). R Markdown jest bardzo wygodna metoda formatowania plikow HTML, PDF i dokumentow MS Word.


5. Pozyskanie danych


Zgodnie z obowiazujacym od 25 maja 2018 r. Ogólnym Rozporzadzeniu o Ochronie Danych Oosbowych (RODO) w naszym kraju istnieje szereg danych, ktore sa prawnie chronione. Zgodnie z panujacym standardem postanowilem wykorzystac te dane, ktore zostaly udostepnione publicznie i nie sa chronione zadnymi prawami autorskimi a ich komercyjne wykorzystanie nie jest zabronione przez organ udstepniajacy.


5.1 Informacja o zrodle danych


W celu pozyskania danych do projektu postanowilem skorzystac ze strony Otwarte Dane.

Wybralem ta strone z kilku powodow. Strona ta zawiera szerokie spektrum danych, ktore z latwoscia mozemy pozyskac w odpowdienim dla nas formacie (zarowno .csv jak i .xlsx). Duza ilosc dostawcow danych takich jak np. Ministerstwo Finansów, Ministerstwo Sprawiedlisoci oraz Glówny Urzad Statystyczny wplywa w duzej mierze na roznorodnosc danych, co moim zdaniem przeklada sie na to, ze kazdy znajdzie tutaj cos dla siebie. Ostatnim aspektem, ktorym sie kierowalem bylo to iz, dane znajdujace sie na tej stronie sa informacja publiczna - dzieki czemu moze byc wykorzystywana bez ograniczen. Nie posiada praw autorskich oraz jest danymi ogolnodostepnymi.


5.2 Wybrane dane


Do swojego projektu postanowilem skorzystac z danych dotyczacych Koncesji na poszukiwanie, rozpoznawanie oraz wydobywanie metanu z pokładów węgla. Uznalem, ze temat ten moze byc ciekawy biorac pod uwage ogolny charakter wybranego przeze mnie kierunku stuidow - Geoinformacja. Wybrane dane pozyskalem z strony Otwarte Dane.

Pobrane dane usystematyzowalem w folderze projektowym. Uznalem, ze taka forma bedzie dla mnie wygodniejsza. Dane, na ktorych bede pracowal sa w jednym miejscu. Dane w swoim projekcie postanowilem zapisac pod nazwa Koncesje_Metan_Wegiel. Uznalem, ze nazwa ta bedzie po prostu najbardziej czytelna. Z wybranego przez mnie pliku mozemy pozyskac informacje na temat przedsiebiorstw oraz posiadanych przez nich koncesji (w tym dat udzielenia, okresow obowiazywania oraz przedmiotow, ktore ta koncesja obowiazuje) na poszukiwanie oraz wydobywanie metanu z pokładów węgla.


5.3 Wczytanie danych


Sposob w jaki wczytalem dane do swojego projektu przedstawiam ponizej. Wykorzystalem w tym celu biblioteke readr.

Koncesje_Metan_Wegiel <- read_delim("Koncesje_Metan_Wegiel.csv", 
    ";", escape_double = FALSE, na = "0", 
    trim_ws = TRUE)
View(Koncesje_Metan_Wegiel)

Wybrane przeze mnie dane reprezentuje ponizsza tabela:

knitr::kable(Koncesje_Metan_Wegiel[],
caption = 'Koncesje na poszukiwanie, rozpoznawanie oraz wydobywanie metanu z pokładów węgla')
Koncesje na poszukiwanie, rozpoznawanie oraz wydobywanie metanu z pokładów węgla
L.p. Przedsiębiorca Nr koncesji Nazwa koncesji Przedmiot koncesji Kopalina Data udzielenia Data obowiązywania Data obowiązywania fazy wydobywczej
1 Termospec Sp. z o.o. 4/2016/p Anna poszukiwanie i rozpoznawanie metan z pokładów węgla 2016-05-11 2021-05-11 nd.
2 PGNiG S.A. 2/2017/Ł Międzyrzecze łączna metan z pokładów węgla 2017-03-07 2022-03-07 2027-03-07
3 Przedsiębiorstwo Wodociągów i Kanalizacji Żory Sp. z o.o. 10/2015/p Żory M poszukiwanie i rozpoznawanie metan z pokładów węgla 2015-12-17 2020-12-17 nd.
4 GAZKOP-1 Sp. z o. o. 11/2011 Żory 1 wydobywanie metan z pokładów węgla 2011-10-31 2031-10-31 nd.
5 GAZKOP-1 Sp. z o. o. 3/2016 Jankowice Wschód wydobywanie metan z pokładów węgla 2016-03-14 2031-03-14 nd.
6 NWR Karbonia S.A. 5/2000/Ł Kaczyce I łączna metan z pokładów węgla 2000-01-28 2005-01-28 2023-01-28
7 GAZKOP-1 Sp. z o. o. 1/2020 Mszana wydobywanie metan z pokładów węgla 2020-01-21 2037-02-10 nd.
8 GAZKOP-WILCHWY Sp. z o.o. 2/2020 Wilchwy wydobywanie metan z pokładów węgla 2020-01-22 2036-02-10 nd.

Dla uproszczenia przyszlych moich prac, zwiazanych z praca na danych, postanowilem przeksztalcic je na data.frame. Dzieki takiemu zabiegowi moja praca w dalszej czesci bedzie znacznie prostsza, a kod bedzie bardziej czytelny, dzieki skróceniu zapisu nazwy naszych przedmiotowych danych.

KMW <- as.data.frame(Koncesje_Metan_Wegiel)

6. Opis danych


Dane, ktore postanowilem wykorzystac do wykonania mojego projektu, dostarczaja nam szereg waznych informacji. Mozemy z nich odczytac takie informacje jak np: jaka spolka odpowiada za eksploatacje danych zloz; kto posiada koncesje; data waznosi koncesji; obszar dzialalnosci, itp. To wlasnie te dane daja nam mozliwosc zlokalizowania obszarow dzialania tych przedsiebiorstw na terenie naszego kraju. Moim zdaniem kluczowym aspektem przedmiotowych danych sa daty udzielenia oraz obowiazywania danych koncesji. To wlasnie takie dane moga byc kluczowe dla nowych spolek chcacych zainwestowac swoje srodki finansowe w tej dziedzinie gospodarki. To wlasnie na ich analizie i szczegolowym przedstawieniu postaram sie skupic w dalszej czesci mojej pracy.


6.1 Ogolny opis danych


Aby prawidlowo przedstawic dane przyjrzyjmy sie ponizszym informacja dolaczonym do pakietu naszych danych.

Wlasnie z tych danych mozemy odczytac informacje takie jak: poziom otwartosci danych, date ich udostepnienia do wiadomosci publicznej, informacje na ktory dzien dane sa sporzadzone oraz co moim zdaniem najwazniejsze to warunki wykorzystania.

Dowiadujemy sie z tych krotkich informacji, ze dane, ktore wybralem charakteryzuja sie pelna mozliwoscia ich komercyjnego wykorzystania, dzieki czemu nie musze martwic sie o ewentualne konsekwencje prawne. Dane, ktore wybralem zostaly udostepnione 3 listopada 2020 r. i na chwile obecna sa aktualne.


6.2 Opis danych R


Moje dane w projekcie przechowuje zmienna KMW. Przedstawia je ponizsza tabela:

L.p. Przedsiębiorca Nr koncesji Nazwa koncesji Przedmiot koncesji Kopalina Data udzielenia Data obowiązywania Data obowiązywania fazy wydobywczej
1 Termospec Sp. z o.o. 4/2016/p Anna poszukiwanie i rozpoznawanie metan z pokładów węgla 2016-05-11 2021-05-11 nd.
2 PGNiG S.A. 2/2017/Ł Międzyrzecze łączna metan z pokładów węgla 2017-03-07 2022-03-07 2027-03-07
3 Przedsiębiorstwo Wodociągów i Kanalizacji Żory Sp. z o.o. 10/2015/p Żory M poszukiwanie i rozpoznawanie metan z pokładów węgla 2015-12-17 2020-12-17 nd.
4 GAZKOP-1 Sp. z o. o. 11/2011 Żory 1 wydobywanie metan z pokładów węgla 2011-10-31 2031-10-31 nd.
5 GAZKOP-1 Sp. z o. o. 3/2016 Jankowice Wschód wydobywanie metan z pokładów węgla 2016-03-14 2031-03-14 nd.
6 NWR Karbonia S.A. 5/2000/Ł Kaczyce I łączna metan z pokładów węgla 2000-01-28 2005-01-28 2023-01-28
7 GAZKOP-1 Sp. z o. o. 1/2020 Mszana wydobywanie metan z pokładów węgla 2020-01-21 2037-02-10 nd.
8 GAZKOP-WILCHWY Sp. z o.o. 2/2020 Wilchwy wydobywanie metan z pokładów węgla 2020-01-22 2036-02-10 nd.

Moje dane niestety nie byly czytelne w tej formie dlatego aby opisac je w lepszy sposob posluzylem sie kilkoma poleceniami, ktore pomogly mi w lepszy sposob przedstawic dane.

typ_danych <- typeof(KMW)
klasa_danych <- class(KMW)
liczba_kolumn <- ncol(KMW)
liczba_wierszy <- nrow(KMW)

Aby zebrac wszystko w jedno miejsce poslylem sie ramka danych stworzona poprzez ponizsze polecenie:

opis_danych <- data.frame(typ_danych, klasa_danych, liczba_kolumn, liczba_wierszy)
typ_danych klasa_danych liczba_kolumn liczba_wierszy
list data.frame 9 8

Z tabeli mozemy odczytac, ze typ wczytanych przez mnie danych jest w formie listy. Dzieki przeksztalceniu jej na poczatku mojej pracy na data.frame, klasa danych jest wlasnie takiego typu. Dane przedstawione w mojej tabeli daja nam informacje, ze dane ukladaja sie w 9 kolumn oraz 8 wierszy.

By lepiej zrozumiec co prezentuja przedmiotowe dane posluzylem sie jeszcze jendym poleceniem.

atrybuty_danych <- attributes(KMW)

To wlasnie polecenie attributes(), zwraca nam informacje o atrybutach naszych danych.

## $names
## [1] "L.p."                                "Przedsiębiorca"                     
## [3] "Nr koncesji"                         "Nazwa koncesji"                     
## [5] "Przedmiot koncesji"                  "Kopalina"                           
## [7] "Data udzielenia"                     "Data obowiązywania"                 
## [9] "Data obowiązywania fazy wydobywczej"
## 
## $class
## [1] "data.frame"
## 
## $row.names
## [1] 1 2 3 4 5 6 7 8
## 
## $spec
## cols(
##   L.p. = col_double(),
##   Przedsiębiorca = col_character(),
##   `Nr koncesji` = col_character(),
##   `Nazwa koncesji` = col_character(),
##   `Przedmiot koncesji` = col_character(),
##   Kopalina = col_character(),
##   `Data udzielenia` = col_date(format = ""),
##   `Data obowiązywania` = col_date(format = ""),
##   `Data obowiązywania fazy wydobywczej` = col_character()
## )

Z powyższej tabeli mozemy odczytac wiele danych w bardzo prosty sposob. Pierwszy dzial naszej tablicy to kolumna $names, zawiera ona nazwy poszczegolnych kolumn znajdujacych sie w tablicy danych. Kazda z nazw jest rowniez ponumerowana dzieki czemu mozemy w bardzo prosty sposob sprawdzic, ze faktycznie ilosc naszych kolumn pokrywa sie z iloscia zwrocona przez polecenie ncol.

Ponizej znajduje sie czesc poswiecona klasie mojego obiektu. Moj obiekt posiada klase = data.frame, gdyz tak przeksztalcilem ja na samym poczatku mojego projektu. Oznacza to ze moje dane przechowywane sa w postaci dwuwymiarowej tabeli. Ramka danych sklada sie z kolumn bedacych wektorami o dowolnym typie.

Przed ostatnim wynikiem, ktory otrzymalem dzieki wykorzystaniu polecenia attributes jest $row.names - jest to analogiczna sytuacja jak w poleceniu nrow - dzieki czemu juz wczesniej wiem ze liczba moich wierszy rowna sie 8. Dzieki skorzystaniu z tego polecenia mam pewnosc ze wczesniejsze polecenie nie popelnilo zadnego bledu.

Ostatnim atrybutem, ktory otrzymalem jest $spec, to tutaj otrzymalem informacje o tym jakiego typu jest kazda z kolumn. W latwy sposob otrzymalem informacje ze nasze dane skladaja sie z character, double, date.


7. Przetwarzanie potokowe (dplyr)


Przetwarzanie potokowe – jeden ze sposobów sekwencyjnego (szeregowego) przetwarzania danych. Dane się filtruje, sortuje, grupuje, podsumowuje, znów filtruje, łączy się z innymi itd. Taka sekwencja operacji przypomina potok, w którym dane wypływają ze źródła, a następnie trafiają na kolejne etapy przetwarzania.

Przetwarzenie potokowe w moim projekcie postanowilem rozpoczac od skorzystania z funkcji select_all. Wydaje mi sie, że w ten sposob, moge bardzo latwo pokazac nazwy kolumn na ktorych bede pracowac. W przyszlosci moze to znaczaco wplynac na czytelnosc mojej pracy gdyz nazwy beda latwiejsze do przeczytania i beda sie wyrozniac na tle innych danych.

KMW_duze <- select_all(KMW, toupper) %>% colnames
## [1] "L.P."                                "PRZEDSIĘBIORCA"                     
## [3] "NR KONCESJI"                         "NAZWA KONCESJI"                     
## [5] "PRZEDMIOT KONCESJI"                  "KOPALINA"                           
## [7] "DATA UDZIELENIA"                     "DATA OBOWIĄZYWANIA"                 
## [9] "DATA OBOWIĄZYWANIA FAZY WYDOBYWCZEJ"

Nastepnie wykorzystan funkcje filter - to wlasnie dzieki niej moge w bardzo latwy sposob wyodrebnic dane dotyczace zagadnienia, ktore w danym momencie interesuje mnie najbardziej.

Pierwszym moim zadaniem bylo wyodrebnienie danych spolek, ktore posiadaja koncesje na wydobycie metanu z pokladów wegla. W tym celu posluzylem sie ponizszym poleceniem:

tylko_wydobycie <-  filter(KMW, `Przedmiot koncesji` == "wydobywanie")

Dzieki takiemu zabiegowi uzyskalem tablice zawierajaca tylko przedsiebiorstwa, ktore mnie interesowaly.

L.p. Przedsiębiorca Nr koncesji Nazwa koncesji Przedmiot koncesji Kopalina Data udzielenia Data obowiązywania Data obowiązywania fazy wydobywczej
4 GAZKOP-1 Sp. z o. o. 11/2011 Żory 1 wydobywanie metan z pokładów węgla 2011-10-31 2031-10-31 nd.
5 GAZKOP-1 Sp. z o. o. 3/2016 Jankowice Wschód wydobywanie metan z pokładów węgla 2016-03-14 2031-03-14 nd.
7 GAZKOP-1 Sp. z o. o. 1/2020 Mszana wydobywanie metan z pokładów węgla 2020-01-21 2037-02-10 nd.
8 GAZKOP-WILCHWY Sp. z o.o. 2/2020 Wilchwy wydobywanie metan z pokładów węgla 2020-01-22 2036-02-10 nd.

Kiedy znamy juz jakie spolki posiadaja koncesjie na wydobycie metanu oraz wykorzystanie tych zasobow, ciekawym zadaniem bylo okreslenie kto posiada koncesje na najdluzszy okres czasu. Aby to sprawdzic posluzylem sie funkcja mutate, dzieki ktorej utworzylem nowa kolumne przedstawiajaca informacje o tym ile czasu dana koncesja obowiazuje.

roznica_czasu <- tylko_wydobycie %>%
  mutate(Dni_posiadania_koncesji = `Data obowiązywania` - `Data udzielenia`)

Dzieki temu polecneiu uzyskujemy dodatkowa kolumne zawierajaca informacje o tym od kiedy dana spolka posiada koncesje na wydobycie metanu.

L.p. Przedsiębiorca Nr koncesji Nazwa koncesji Przedmiot koncesji Kopalina Data udzielenia Data obowiązywania Data obowiązywania fazy wydobywczej Dni_posiadania_koncesji
4 GAZKOP-1 Sp. z o. o. 11/2011 Żory 1 wydobywanie metan z pokładów węgla 2011-10-31 2031-10-31 nd. 7305 days
5 GAZKOP-1 Sp. z o. o. 3/2016 Jankowice Wschód wydobywanie metan z pokładów węgla 2016-03-14 2031-03-14 nd. 5478 days
7 GAZKOP-1 Sp. z o. o. 1/2020 Mszana wydobywanie metan z pokładów węgla 2020-01-21 2037-02-10 nd. 6230 days
8 GAZKOP-WILCHWY Sp. z o.o. 2/2020 Wilchwy wydobywanie metan z pokładów węgla 2020-01-22 2036-02-10 nd. 5863 days

Takie przedstawienie danych nie jest dla mnie satysfakcjonujace gdyz doszukanie sie pewnych informacji moze byc utrudnione. Dlatego posortowalem moje dane dodatkowo, w taki sposob, aby okres czasu od uzyskania do wygasniecia koncesji byl ulozony w sposob malejacy. Tak uzyskalem dane, które ze spólek posiada najdluzej obowiazujaca koncesje (beda one na samym dole tabeli).

sortowanie <- arrange(roznica_czasu, Dni_posiadania_koncesji )

W tym celu posluzylem sie funkcja arrange. Wynik mojej operacji przedstawia ponizsza tabela:

L.p. Przedsiębiorca Nr koncesji Nazwa koncesji Przedmiot koncesji Kopalina Data udzielenia Data obowiązywania Data obowiązywania fazy wydobywczej Dni_posiadania_koncesji
5 GAZKOP-1 Sp. z o. o. 3/2016 Jankowice Wschód wydobywanie metan z pokładów węgla 2016-03-14 2031-03-14 nd. 5478 days
8 GAZKOP-WILCHWY Sp. z o.o. 2/2020 Wilchwy wydobywanie metan z pokładów węgla 2020-01-22 2036-02-10 nd. 5863 days
7 GAZKOP-1 Sp. z o. o. 1/2020 Mszana wydobywanie metan z pokładów węgla 2020-01-21 2037-02-10 nd. 6230 days
4 GAZKOP-1 Sp. z o. o. 11/2011 Żory 1 wydobywanie metan z pokładów węgla 2011-10-31 2031-10-31 nd. 7305 days

Dzieki takiemu sortowaniu tabeli, moglem z latwoscia zobaczyc, ktore spolki posiadaja najdluzsza wazna koncesje na eksploatacje zloza. Uwazam ze takie przedstawienie danych jest czytelniejsze.

Aby efektywniej przedstawic agregaty mojej pracy postanowilem skorzystac z funkcji summarise, przy pomocy ktorej uzyskalem wyniki: minimum, maksimum, wartosc srednia oraz kwantyl dla naszej wartosci - dni posiadania koncesji.

sortowanie %>% summarise(maksymalny = max(Dni_posiadania_koncesji),
                         minimalny = min(Dni_posiadania_koncesji),
                         sredni = mean(Dni_posiadania_koncesji),
                         kwantyl = quantile(Dni_posiadania_koncesji, 0.25)) -> statystyki

Przedmiotowe dzialanie pozwolilo mi w latwy sposob znalesc wartosci interesujace mnie w calej tabeli oraz pozwolilo zebrac je w jednym miejscu w formie graficznej, ktora najbardziej mi odpowiada.

maksymalny minimalny sredni kwantyl
7305 days 5478 days 6219 days 5766.75 days

Nastepnym krokiem, ktory podjalem bylo wyselekcjonowanie dwoch kolumn, ktore najbardziej mnie interesowaly a mianowicie wartosci maksymalnej i minimalnej. W tym celu skorzystalem z funkcji select, wybierajac pierwsza i druga kolumne.

min_max <- statystyki %>% select (1:2)
maksymalny minimalny
7305 days 5478 days

Ostatnim aspektem przetwarzania potokowego, ktorego sie pojalem, jest grupowanie. W tym celu posluzylem sie funkcja group_by. Dzięki temu moglem później łatwo te grupy porównać.

grupa <- sortowanie %>%
  group_by(L.p.) %>%
  summarise(maksymalny = max(Dni_posiadania_koncesji),
          minimalny = min(Dni_posiadania_koncesji),
          sredni = mean(Dni_posiadania_koncesji),
          kwantyl = quantile(Dni_posiadania_koncesji, 0.25))

Skorzystalem z grupowania wzgledem liczby porzadkowej, okreslajacej numer kolumny. Dzieki temu otrzymalem tabele zawierajaca wartosci zagregowane dla kolumn mojej tabeli ktora analizowalem w mojej pracy.

L.p. maksymalny minimalny sredni kwantyl
4 7305 days 7305 days 7305 days 7305 days
5 5478 days 5478 days 5478 days 5478 days
7 6230 days 6230 days 6230 days 6230 days
8 5863 days 5863 days 5863 days 5863 days

Dane z powyzszej tabeli pozwolily zauwazyc, że grupowanie doprowadzilo do tego, że uzyskalem wartosci zagregowane dla kazdego wiersza z osobna. Niestety przygotowane przeze mnie dane posiadaja malo zmiennych liczbowych dlatego te wartosci sa sobie rowne. Caly proces dzialania jest prawidlowy. Dzieki tej tabeli moge w latwy sposb odczytac wartosci dni dla interesujacego mnie wiersza.


8. Interaktywna tabela


Tabela interaktywna - to tabela, ktorej wartosci kolumn oraz wierszy nie sa statyczne. Mozemy przy uzyciu takiej tablicy sortowac interesujace nas dane zgodnie z naszymi oczekiwaniami. Mozemy w dowolny sposob sortowac kolejnosc naszych kolumn oraz wierszy.

Uwazam, ze w moim projekcie na szczegolna uwage zasluguje tabela uzyskana przy pomocy funkcji mutate i to wlasnie na jej omowieniu postaram sie skupic. Uznalem ze pozostale przyklady pomimo wykonania na nich pewnych operacji, nie sa na tyle interesujace aby poddawac je szczegolowej analizie.

Swoja prace z danymi uzyskanymi przy pomocy mutate rozpoczalem od utworzenia tabeli interaktywnej. W tym celu skorzystalem z pakietu DT.

datatable(head(roznica_czasu[2:10]), class = 'cell-border stripe',
          caption = 'Tabela przedstawiajaca użycie funkcji mutate',
          rownames = FALSE)

Calosc analizy przedstawilem w tabeli interaktywnej. Dzieki niej otrzymalem mozliwosc ingerencji w kolejnosc elementów, które moglem zmieniac za pomoca strzalek znajdujacych sie obok nazwy kolumny. Otrzymalem równiez pasek Search przy pomocy którego, moglem w latwy sposob znalezc interesujace mnie dane np. koncesje o danej nazwie. Dodatkowo pod moja tabela pojawila sie mozliwosc zmiany strony tabeli. Niestety tabela z przygotowanych przeze mnie danych miesci sie na jednej stronie (ilosc danych byla zbyt mala do utworzenia kolejnej). W tym przypadku przelacznik nie byl potrzebny.

Dla lepszej czytelnosci postanowilem opuscic kolumne L.P, gdyz uznalem ja za zbedna. Numer ewidencyjny naszego przedsiebiorstwa w moich danych nie byl elementem kluczowym dlatego tez zdecydowalem sie go pominac. Z tabeli moglem odczytac nazwy przedsiebiorstw, ktore posiadaja koncesje na wydobywanie metanu z pokladów wegla. Wynika z tego, że takie koncesje na chwile obecna w naszym kraju posiada jedynie spolka GAZKOP. Z tabeli moglem odczytac dokladnie, w jakim terminie, przedsiebiorstwa wchodzace w sklad tej spolki posiadaja prawo na eksploatacje zloza.

Nazwa koncesji informuje osobe zainteresowana, w jakim regionie Polski lub na jakim obszarze przedsiebiorstwo GAZKOP posiada prawo do pracy. Z mojej tabeli mozna odczytac informacje, ze GAZKOP prowadzi dzialanosc w miejscowosciach takich jak: Żory, Jankowice Wschód, Mszana, Wilchawy. To wlasnie dzieki tej wiedzy moge stwierdzic ze poszukiwanie zloz metanu w Polsce prowadzi sie glownie na terenie Górnego i Dolnego Ślaska.

Data obowiazywania koncesji jest nierozerwalnie zwiazana z data utraty koncesji na wydobywanie metanu z pokladow wegla przez spolke. Informacja ta pomimo swojej odleglej wizji jest jednak dla nas bardzo wazna, gdyz to wlasnie ta informacja obrazuje jak dalekoidace plany posiadaja spolki na rozwoj tej wlasnie brazny. Kto wie, moze w przyszlosci dzieki takim badaniom oraz dzialaniom, Polska chociaz w niewielkim stopniu bedzie w stanie sama zaopatrzyc sie w metan, dzieki czemu minimalnie uniezalezni sie od Stanów Zjednocznych oraz Rosji.

Ostatnia kolumna interaktywnej tabeli to kolumna, z ktorej mozemy odczytac ilosc dni w jakich obowiazuje dana koncesja. Informacja ta, moim zdaniem, wplywa na to ze mozemy okreslic, z ktorymi zlozami pokladamy najwieksze nadzieje. Zloza, ktore nie rokuja - posiadaja koncesje na mniejszy okres czasu (ale nie zawsze ten aspekt ma wplyw na dlugosc koncesji). Nie narazi to nikogo na staty finansowe zwiazane z bezowocnymi poszukiwaniami. Dzieki takiemu rozwiazaniu zloza z lepsza infrastruktura beda mogly zostac lepiej wykorzystane w przyszlosci. Dzieki tej tabeli widzimy ze najwieksze nadzieje wiaze sie z koncesja nr 11/2011, gdyz jej okres obowiazywania jest najdluzszy (co nie znaczy ze najlepszy).

Uwazam ze tabele interaktywne sa najlepsza forma prezentacji danych, skladajacych sie duzej ilosci wierszy. Niestety takie dane nie mieszcza sie w jednej prostej tabeli. Stwierdzam ze wykorzsytanie tabeli interaktywnej to mozliwosc czytelnego przejrzenia wszystkich danych oraz latwego ich sortowania.


9. Funkcja


Funkcje - to części kodu, które wykonują ustalone czynności po ich wywołaniu. Czynności te są tylko wykonywane wtedy, kiedy zostanie wywołana dana funkcja. Tworzenie funkcji w kodzie pozwala zautomatyzować wykonywanie pewnych, powtarzających się czynności (i tym samym zmniejszyć ilość kodu).

Aby lepiej przedstawic swoje dane oraz przy tym lepiej je zrozumiec, postanowilem napisac funkcje, ktora bedzie odpowiadac za normalizacje moich danych. Dokladniej bedzie odpowiadac za dane przechowujace ilosc dni od zawarcia do rozwiazania koncesji. W tym celu swoja prace rozpoczolem od wyodrebnienia kolumny przechowujacej te informacje jako typ as.numeric. Mam pewnosc ze nie napotkam na swojej drodze zadnych przeszkód.

dni_koncesji_numeric <- as.numeric(roznica_czasu$Dni_posiadania_koncesji)

Normalizacja – procedura wstępnej obróbki danych w celu umożliwienia ich wzajemnego porównywania i dalszej analizy. Normalizacje opisuje sie wzorem \(normalize = \frac {X - Xmin} {Xmax - Xmin}\).

Widzimy tutaj zaleznosc wartosci maksymalnej oraz minmalnej danej tabeli. Normalizacja min-max przy pomocy funkcji liniowej sprowadza dane do wskazanego przez użytkownika przedziału (min, max). Powinniśmy przy tym znać zakres jaki mogą osiągnąć dane. Jeśli nie znamy tego zakresu, możemy posłużyć się wartością największą i najmniejszą występującą w analizowanym zbiorze.

Dlatego, aby prawidlowo wykonac postawione sobie zadanie, postanowilem podzielic ten wzor na dwie czesci - oddzielnie licznik i oddzielnie mianownik. Dzieki temu nie musialem martwic sie o prawidlowosc obliczen, gdyz bylem ich pewny. Funkcje, ktora stworzylem przedstawia ponizszy fragment kodu.

normalizacja <- function(x){ 
  licznik <- x - min(x)
  mianownik <- max(x) - min(x)
  normalize <- licznik / mianownik
  
  return(normalize)
}

W celu ulatwienia sobie zadania utworzylem zmienna normalize, ktora przechowuje wynik calosci operacji normalizacji. To wlasnie ta czesc kodu jest zwracana jako moj wynik - poprzez funkcje return.

Moja funkcje w skrocie mozna opisac jako :

Nazwa : Normalizacja

Liczba argumentów: Potrzebujemy tylko jednego argumentu, ktory jest wierszem lub kolumna z ktorej chcemy skorzystac

Cialo funkcji: Prosta formula ktora chcemy zwrocic.

Sprawdze teraz dzialanie swojej funkcji.

normalizacja(dni_koncesji_numeric)
## [1] 1.0000000 0.0000000 0.4116037 0.2107280

Normalizacja danych to skalowanie danych do przedzialu np. [-1, 1] lub [0,1]. Dzieki tej informacji mozemy stwierdzic ze nasze dane znajduja sie w tym przedziale, a co za tym idzie nasza funkcja dziala prawidlowo.

By udoskonalic dzialanie mojej funkcji zmodyfikowalem ja dodatkowo tak, by w momencie jej uzycia dane otrzymac w formie wykresu, a nie w tabeli. W tym celu napisalem nowa funkcje.

normalizacja_wykres <- function(x){ 
  licznik <- x - min(x)
  mianownik <- max(x) - min(x)
  normalize <- licznik / mianownik
 
  wykres_normalizacja <-  plot(normalize, main = "Wykres normalizacji",
                               xlab = "Numer kolumny" , 
                               ylab= "Wartosc normalizacji",
                               col="red")
  
  return(wykres_normalizacja)
}

Jak widac funkcja nie zostala znaczaco przeksztalcona. Jedyna zmiana jest dodanie zmiennej przechowujacej wykres moich danych, ktory nastepnie zwracam. Dzieki takiemu zabiegowi po wywolaniu mojej funkcji rysuje sie ona jako wykres.

normalizacja_wykres(dni_koncesji_numeric)

## NULL

Operacja ta powoduje ze wartosc mojej normalizacji moze zostac odczytana z punktow na wykresie. Jednak takie przedstawienie tych danych moim zdaniem jest gorsze od tabeli, gdyz nie jest az tak dokladne.

Drobna edycja tej funkcji moze zmienic ja na bardziej uzyteczna. Zamiast punktow stworzymy linie. Nasz wykres idealnie bedzie obrazowac zmiany normalizacji naszych danych.

normalizacja_wykres_zmiana <- function(x){ 
  licznik <- x - min(x)
  mianownik <- max(x) - min(x)
  normalize <- licznik / mianownik
 
  wykres_normalizacja_zmiana <-  plot(normalize, main = "Wykres zmiany normalizacji",
                               xlab = "Zmiana normalizacji wzgledem kolumn" , 
                               ylab= "Wartosc normalizacji",
                               col="blue" , type ="l")
  
  return(wykres_normalizacja_zmiana)
}

Aby te wykresy roznily sie od siebie jeszcze bardziej postanowilem dodatkowo zmienic wartosc koloru wystepujacego na nim.

normalizacja_wykres_zmiana(dni_koncesji_numeric)

## NULL

Nasza lamana obrazuje nam sposob w jaki zmienia sie normalizacja na przestrzeni naszych kolumn. Z latwoscia mozemy odczytac ze nasze dane sa od siebie skrajnie rozne, gdyz wartosc naszej normalizacji gwaltownie zmienia swoja wartosc.


10. Petla


Pętla – jedna z podstawowych konstrukcji programowania strukturalnego (obok instrukcji warunkowej i instrukcji wyboru). Umożliwia cykliczne wykonywanie ciągu instrukcji określoną liczbę razy, do momentu zajścia pewnych warunków, dla każdego elementu kolekcji lub w nieskończoność.

W mojej pracy postanowilem skorzystac z petli while (pętlę while w praktyce stosuje się zawsze tam, gdzie mamy potrzebę przetwarzania nieokreślonej liczby danych), ktorej zadaniem jest obliczenie ile dokladnie lat ma obowiazywac dana koncesja. W tym celu postanowilem napisac ja w taki sposob.

dni <- dni_koncesji_numeric
 
 while (dni > 365)
   
 {
   
   dni <- dni / 365
   
   if (dni == 365) break
   lata <- round(dni, digits = 0)
   
   print(lata)
   
 }
## [1] 20 15 17 16

Jak mozna z latwoscia zauwazyc jako jej warunek posluzylem sie wczesniej przygotowana zmienna dni. Przechowuje wartosc dni posiadania koncesji, ktore utworzylem wczesniej. Moja petla dziala do momentu kiedy moj wynik osiagnie wartosc 365 dni czyli caly rok.

Nastepnie postanowilem utworzyc zmienna lata, ktora bedzie przechowywac nasz wynik zaokraglony do liczby calkowitej. Uznalem ze taka prezentacja danych bedzie najodpowiedniejsza jako iz sa to pelne lata obowiazywania koncesji.


11. ggplot2


GGPLOT2 - pakiet wizualizacji danych dla statystycznego języka programowania R, poswiecony wizualizajci danych. Pomaga on nam znacznie polepszyc jakos prezentowanych przez nas danych. Daje nam mozliwosc stworzenia prawie kazdego typu wykresu i edytowania go w sposob jaki tylko zapragniemy.


11.1 Wykres punktowy


Aby przedstawic moje dane, w sposob jak najbardziej czytelny, postanowilem stworzyc wykres skladajacy sie z punktow zaznaczonych pomiedzy odpowiednimi liniami na ukladzie wspólrzednych. Uznalem, ze najbardziej przydatny moze okazac sie wykres obrazujacy nam, w ktorym roku dana koncesja zostala udzielona. W tym celu skorzystalem z pakietu GGPLOT2. Postanowilem dla lepszej czytelnosci wykres zeedytowac, co prezentuje funkcja ponizej.

wykres_punktowy <- KMW %>% 
 ggplot(., aes(x = `Nazwa koncesji`, y = `Data udzielenia`)) +
  geom_point() +
  geom_smooth() +
  theme_dark() +
   labs(title = "Wykres daty udzielenia koncesji wzgledem jej nazwy",
                 x = "Nazwa Koncesji",
                 y = "Data udzielenia",
                 color = "Red",
                 shape = 23) +
  theme(plot.background = element_rect(fill = "grey",
                                        color = "black",
                                        size = 2, 
                                        linetype = 3)) +
  theme(title = element_text(size = 16,
                                       face = "bold"),
                      axis.line = element_line(color = "black",
                                           size = 1),
                  legend.position = "bottom",
                  legend.direction = "horizontal")

Powyzszy kod zawiera w sobie elementy edycji wykresu, ktore postanowilem zastosowac. Tym samym stworzylem styl wykresu, który postaram sie utrzymac w calym projekcie. Efekt koncowy prezentuje sie nastepujaco:

Z wykresu mozemy odczytac takie informacje jak to, w którym roku dana koncesja zostala udzielona. Z latwoscia mozemy zauwazyc tutaj, ktora koncesja zostala udzielona jako pierwsza - Kaczyce I oraz która najpozniej - Mszana, Wilchwy. Wykres prezentuje nam informacje dzieki punktom zawieszonym na odpowiedniej wysokosci wzgledem osi pionowej, obrazujacej lata. Uwazam, ze takie przedstawienie danych jest bardzo ciekawa forma, gdyz w latwy sposob mozemy odczytac ile lat dzieli poszczegolne koncesje.

Ostatnim aspektem mojej pracy z tym wykresem jest jego zapisanie do formatu .png. Dzieki takiemu zabiegowi osoba, ktora bedzie zainteresowana ewentualnym wydrukowaniem tego wykresu lub jego umieszczeniem w dowolnym opracowaniu bedzie mogla to z latwoscia wykonac.

ggsave(wykres_punktowy, filename = "wykres_punktowy.png")

Plik wynikowy znajduje sie w folderze projektu pod nazwa wykres_punktowy.png


11.2 Wykres slupkowy


Drugim wykresem, na ktory pragne zwrocic uwage jest wykres slupkowy. Uwazam, ze ten wykres jest jednym z najbardziej czytelnych rodzaji wykresu dlatego postanowilem go wykorzystac w swojej pracy. Swoja prace zaczalem od wybrania interesujacych mnie danych, w tym przypadku postawilem na to aby zobaczyc sposob, jaki przedmiot koncesji posiada dany przedsiebiorca. W tym celu prace rozpoczalem od zaprogramowania wykresu zgodnie ze stylem ktory obralem wczesniej oraz z wprowadzeniem odpowiednich danych.

wykres_slupkowy <- KMW %>% 
            ggplot(mapping = aes(x =Przedsiębiorca, fill = `Przedmiot koncesji`)) +
            geom_bar() +
            theme_dark() +
            labs(title = "Przedmiot koncesji danego Przedsiebiorcy",
                 x = "Nazwa Przedsiebiorcy",
                 y = "Ilosc koncesji",
                 fill = "Przedmiot Koncesji") +
              scale_fill_discrete(name = "Przedmiot Koncesji",
                                 labels = c("poszukiwanie i rozpoznawanie", 
                                            "łączna","wydobywanie")) +
             coord_flip() +
             theme(plot.background = element_rect(fill = "grey",
                                        color = "black",
                                        size = 2, 
                                        linetype = 3)) +
            theme(title = element_text(size = 16,
                                       face = "bold"),
                      axis.line = element_line(color = "black",
                                           size = 1))

Estetycznym aspektem tego wykresu jest dodanie legendy zatytuowanej “Przedmiot Koncesji” - zgodnie z danymi ktorych uzywam. Takie rozwiazanie znaczaco ulatwia rozpoznanie jaki kolor odpowiada za dany przedmiot koncesji.

Wykres prezentuje nam w przejrzysty sposob, jaki rodzaj koncesji posiada dana spolka oraz jaka jest ilosc takich koncesji. Z powyzszego wykresu moge odczytac, ze kazdy przedmiot koncesji zostal przyporzadkowany jednemu z trzech kolorów. Odpowiednio: czerwony odpowiada za poszukiwanie i rozpoznawanie zloz metanu w pokladach wegla kamiennego; niebieski odpowiada za wydobycie natomiast zielony laczy w sobie cechy obydwu przedmiotów koncesji. Rowniez z tego wykresu mozemy odczytac, ze tylko GAZKOP-1Sp z o.o., posiada wiecej niz jedna koncesje. Wykres prezentuje nam rowniez, ze spolka GAZKOP-1 Sp.z o.o. posiada lacznie 3 koncesjie na wydobycie.

Ponownie wykres postanowilem zapisac do pliku, ktory znajduje sie w folderze projektu, pod analogiczna nazwa wykres_slupkowy.png

ggsave(wykres_slupkowy, filename = "wykres_slupkowy.png")

11.3 Interaktywny wykres


Ostatnim punktem mojej pracy jest proba stworzenia interaktywnego wykresu. Postanowilem w tym celu skorzystac z biblioteki Plotly. Na bazie dostepnych poradników oraz gotowych materialow postanowilem skonstruowac wykres typu Filter in R.

wykres_interaktywny <- plot_ly(
  type = 'scatter',
  x = KMW$`Nazwa koncesji`,
  y = KMW$`Data obowiązywania`,
  text = rownames(KMW),
  textposition = 'middle center',
  hoverinfo = 'text',
  mode = 'markers',
  showlegend = TRUE,
  visible = TRUE,
  size = 7,
  transforms = list(
    list(
      type = 'filter',
      target = 'y',
      operation = '>',
      value = (KMW$`Data obowiązywania`)
    )
  )
)

Przyklad nie jest zbytnio skomplikowany. Postanowilem go stworzyc analogicznie jak przyklad wykresu punktowego z mojej pracy. Dzieki temu otrzymalem wykres dzieki, ktoremu z latwoscia moge sprawdzic date obowiazywania koncesji dla danego przedsiebiorstwa.

Powyższy wykres pomimo szczatkowej ilosci informacji przekazuje nam dane, ktore dla niektorych branz moga okazac sie kluczowe. Obrazuje on nam date obowiazywania koncesji na wydobycie metanu. Wykres uwzglednia aktualna date (przez co ignoruje wszystkie koncesjie, ktore juz wygasly). Posiadamy mozliwosc przyblizenia jak i oddalenia skali. Moim zdaniem, najwazniejsze jest to, że przedmiotowy diagram daje nam mozliwosc zapisania uzyskanego wykresu w formacie .png, dzieki czemu mozemy zapisac go oraz wydrukowac, aby miec pewnosc ze nie zapomnimy o zadnej z dat.


12. Wnioski


Reasumujac - wykonujac to cwiczenie poszerzylem moja wiedze oraz umiejetnosci programowania w jezyku R. Poznalem wiele mozliwosci wykorzystania tego jezyka do analizy jak i wizualizacji danych. Dzieki nabytym kwalifikacja w przyszlosci bede mogl ja wykorzystywac aby osiagnac zamierzony cel.

Uważam, że najważniejszym aspektem mojej pracy byla zrecznosc polaczenia wiedzy zdobytej z zakresu programowania z faktycznym zastosowaniem tej wiedzy poprzez napisanie sprawozdania przy pomocy RMarkdown. Wiedza zdobyta podczas wykonywania tego cwiczenia w przyszlosci moga ulatwic mi wiele aspektow życia, jak i studiowania. Dzieki zdobytym zdolnoscia w przyszlosci bede mógl skorzystac wlasnie z R, w celu napisania np. sprawozdania technicznego z wykonanego projektu. Uwazam ze taka forma sprawozdania bedzie znacznie ciekawsza od standardowej wersji w Wordzie.


Bibliografia


  1. https://bookdown.org/yihui/rmarkdown/html-document.html (dostep 09.11.2020)
  2. https://www.datadreaming.org/post/r-markdown-theme-gallery/ (dostep 09.11.2020)
  3. https://rpubs.com/danapower/577147 (dostep 09.11.2020)
  4. https://pl.wikipedia.org/wiki/R_(język_programowania) (dostep 09.11.2020)
  5. https://bookdown.org/yihui/rmarkdown/ (dostep 09.11.2020)
  6. https://dane.gov.pl/pl (dostep 10.11.2020)
  7. http://pbiecek.github.io/Przewodnik/Programowanie/jak_tworzyc_raporty.html (dostep 10.11.2020)
  8. https://tibble.tidyverse.org (dostep 15.11.2020)
  9. https://riptutorial.com/pl/r/example/2871/tworzenie-tabeli-danych (dostep 17.11.2020)
  10. https://cran.r-project.org/doc/contrib/wprowadzenie_do_R.pdf (dostep 17.11.2020)
  11. https://plotly.com/r/ (dostep 22.11.2020)
  12. https://cran.r-project.org/doc/contrib/Biecek-R-basics.pdf (dostep 22.11.2020)
  13. https://www.walpaperlist.com/2020/01/4k-wallpaper-japan-night.html (dostep 22.11.2020)
  14. https://dmsales.com/blog/pozyskiwanie-danych-na-potrzeby-kampanii-reklamowych-w-swietle-rodo/ (dostep 26.11.2020)
  15. https://uodo.gov.pl/404 (dostep 9.12.2020)
  16. http://zasoby.open.agh.edu.pl/~15spkiepas/index.php/jezyk-r/ramka-danych/index.html (dostep 9.12.2020)
  17. https://pl.wikipedia.org/wiki/Przetwarzanie_potokowe (dostep 9.12.2020)
  18. https://www.rdocumentation.org/packages/dplyr/versions/0.7.8 (dostep 10.12.2020)
  19. https://rstudio.github.io/DT/ (dostep 10.12.2020)
  20. https://r4ds.had.co.nz/functions.html (dostep 11.12.2020)
  21. https://stackoverflow.com/questions/32506116/subsetting-data-frame-without-column-names (dostep 11.12.2020)
  22. https://informatyk.edu.pl/funkcje/ (dostep 11.12.2020)
  23. https://www.overleaf.com/learn/latex/Mathematical_expressions (dostep 11.12.2020)
  24. https://www.overleaf.com/learn/latex/Fractions_and_Binomials (dostep 11.12.2020)
  25. https://pl.wikipedia.org/wiki/Normalizacja_(technika) (dostep 11.12.2020)
  26. http://zsi.ii.us.edu.pl/~nowak/ed/cw4.pdf (dostep 11.12.2020)
  27. https://www.guru99.com/r-functions-programming.html (dostep 11.12.2020)
  28. https://www.statmethods.net/graphs/line.html (dostep 12.12.2020)
  29. https://pl.wikipedia.org/wiki/Pętla_(informatyka) (dostep 12.12.2020)
  30. https://www.datacamp.com/community/tutorials/tutorial-on-loops-in-r (dostep 12.12.2020)